package bachelor.view {
	import app.core.action.RotatableScalable;

	import flash.display.Bitmap;
	import flash.display.Loader;
	import flash.display.MovieClip;
	import flash.events.Event;
	import flash.events.TimerEvent;
	import flash.geom.ColorTransform;
	import flash.net.URLRequest;
	import flash.utils.Timer;

	/**
	 * @author Johannes
	 */
	public class Bookmark extends RotatableScalable 
	{
////////////////////////////////////////////////////////////////////////////////
/////// VARIABLES //////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
		
		private var _size : int;
		private var _tempScale  : Number;
		private var _tintColor : uint;

		public static const START_FADING_OUT : String = "startFadingOut";
		private var _myTimer : Timer = new Timer(23000, 1);		
		
		
		
		
////////////////////////////////////////////////////////////////////////////////
/////// CONSTRUCTOR ////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
		public function Bookmark(p_path : String, p_size : int, p_tintColor : uint) 
		{
//			trace("    Bookmark init ...");
			_size = p_size;
			_tintColor = p_tintColor;
			init(p_path);
			
		}



////////////////////////////////////////////////////////////////////////////////
/////// METHODS ////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
		private function init(p_path : String) : void 
		{
//			trace("Bookmark -> init() ...");
			loadBookmarkPic(p_path);
		
		}

		private function loadBookmarkPic(p_path : String):void
		{
//			trace("    Bookmark -> loadBookmark() ...");
			var loader:Loader=new Loader();
			var req:URLRequest=new URLRequest(p_path);
			loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);
			loader.load(req);
		}

/////// Bild einladen //////////////////////////////////////////////////////////
		private function onComplete(evt:Event):void
		{
//			trace("    Bookmark -> onComplete() ...");
			var _bitmap : Bitmap = evt.target.loader.content as Bitmap;

			var scaleFactor : Number = _size / Math.min(_bitmap.width, _bitmap.height); 
			_tempScale = scaleFactor; 
			_bitmap.width  = _bitmap.width  * _tempScale;
			_bitmap.height = _bitmap.height * _tempScale;
			/*
			 * Bitmap-Mittelpunkt auf den Pic-Mittelpunkt schieben
			 */
			_bitmap.x = (-1) * _bitmap.width / 2;
			_bitmap.y = (-1) * _bitmap.height / 2;
			
			drawCorners(_bitmap.width, _bitmap.height);
			addChild(_bitmap);
	
			startFadingOutTimer();		
//			/*
//			 * Hilfspunkt
//			 */
//			var _mitte:MovieClip = new MovieClip();
//			_mitte.graphics.beginFill(0x00FF00);
//			_mitte.graphics.drawCircle(0,0, 3);
//			_mitte.graphics.endFill();
//			_mitte.x = 0;
//			_mitte.y = 0;
//			addChild(_mitte);
		}


		private function drawCorners(p_width : int, p_height : int) : void 
		{

			var verlaufColorTransform : ColorTransform = new ColorTransform();
			verlaufColorTransform.color = _tintColor;
			verlaufColorTransform.alphaMultiplier = 0.25;

			// Oben links
			var _corner1 : MovieClip = MovieClip(new bookmarkCornerMC());
			_corner1.x = -p_width/2  - 2 * (_tempScale*7);
			_corner1.y = -p_height/2 - 2 * (_tempScale*7); 
			_corner1.scaleX = _tempScale*7; 
			_corner1.scaleY = _tempScale*7; 
			_corner1.rotation = 0;
			_corner1.transform.colorTransform = verlaufColorTransform;
			
			addChild(_corner1);

			// Oben rechts
			var _corner2 : MovieClip = MovieClip(new bookmarkCornerMC());
			_corner2.x = p_width/2  + 2 * (_tempScale*7);
			_corner2.y = -p_height/2 - 2 * (_tempScale*7); 
			_corner2.scaleX = _tempScale*7; 
			_corner2.scaleY = _tempScale*7; 
			_corner2.rotation = 90;
			_corner2.transform.colorTransform = verlaufColorTransform;
			
			addChild(_corner2);

			// Unten rechts
			var _corner3 : MovieClip = MovieClip(new bookmarkCornerMC());
			_corner3.x = p_width/2  + 2 * (_tempScale*7);
			_corner3.y = p_height/2 + 2 * (_tempScale*7); 
			_corner3.scaleX = _tempScale*7; 
			_corner3.scaleY = _tempScale*7; 
			_corner3.rotation = 180;
			_corner3.transform.colorTransform = verlaufColorTransform;
			
			addChild(_corner3);

			// Unten links
			var _corner4 : MovieClip = MovieClip(new bookmarkCornerMC());
			_corner4.x = -p_width/2 - 2 * (_tempScale*7);
			_corner4.y = p_height/2 + 2 * (_tempScale*7); 
			_corner4.scaleX = _tempScale*7; 
			_corner4.scaleY = _tempScale*7; 
			_corner4.rotation = 270;
			_corner4.transform.colorTransform = verlaufColorTransform;
			
			addChild(_corner4);
		}



/////// Ausfaden nach 20 Sekunden //////////////////////////////////////////////
		public function startFadingOutTimer() : void 
		{
//			trace("    Bookmark -> startFadingOutTimer() ...");
			_myTimer.stop();
			_myTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
			_myTimer.start();
		}

		private function onTimerComplete(evt : TimerEvent) : void 
		{
//			trace("    Bookmark -> onTimerComplete() ...");
			dispatchEvent(new Event(START_FADING_OUT));
		}

		public function stopFadingOutTimer() : void 
		{
//			trace("    Bookmark -> stopFadingOutTimer() ...");
			_myTimer.stop();	
		}
		
		
		
/////// Scale-Werte fürs Ausfaden zwischenspeichern ////////////////////////////
		public function setScaleVal(p_scaleVal : Number) : void 
		{
			_tempScale = p_scaleVal;
		}


		public function getScaleVal() : Number
		{
			return _tempScale;
		}



////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////

	}
}
